package com.xiangwei.util;

import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * 共通
 *Date:2015/06/26
 * @author David
 */
public class Common {
	/**
	 * 获得一个UUID
	 * 
	 * @return String UUID
	 */
	public static String getUUID() {
		String uuidSz = UUID.randomUUID().toString();
		// 去掉“-”符号
		return uuidSz.substring(0, 8) + uuidSz.substring(9, 13)
				+ uuidSz.substring(14, 18) + uuidSz.substring(19, 23)
				+ uuidSz.substring(24);
	}
	/**
	 * 格式日期：yyyyMMddHHmmss
	 * @param str
	 * @return
	 */
	public static String getStringFullDate(){
		SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
		String str = null;
		str = format.format(new Date());
		return str;
	}
	
	 /**
	  * 字符串编码转换的实现方法
	  * @param str  待转换编码的字符串
	  * @param newCharset 目标编码
	  * @return
	  * @throws UnsupportedEncodingException
	  */
	 public static String changeCharset(String str, String newCharset)
	   throws UnsupportedEncodingException {
	  if (str != null) {
	   //用默认字符编码解码字符串。
	   byte[] bs = str.getBytes();
	   //用新的字符编码生成字符串
	   return new String(bs, newCharset);
	  }
	  return null;
	 }
	/**
	 * 获取当前服务器时间
	 * @return
	 */
	public static Date nowDate() {
		return new Date();
	}
	/**
	 * 判断String是否为空
	 * 
	 * @param str
	 * @return
	 */
	public static boolean isEmptyString(String str) {
		return str != null && !"".equals(str.trim());
	}

	/**
	 * 判断对象或对象数组中每一个对象是否为空: 对象为null，字符序列长度为0，集合类、Map为empty
	 * 
	 * @param obj
	 * @return
	 */
	public static boolean isNullOrEmpty(Object obj) {
		if (obj == null)
			return true;

		if (obj instanceof CharSequence)
			return ((CharSequence) obj).length() == 0;

		if (obj instanceof Collection<?>)
			return ((Collection<?>) obj).isEmpty();

		if (obj instanceof Map<?, ?>)
			return ((Map<?, ?>) obj).isEmpty();

		if (obj instanceof Object[]) {
			Object[] object = (Object[]) obj;
			if (object.length == 0) {
				return true;
			}
			boolean empty = true;
			for (int i = 0; i < object.length; i++) {
				if (!isNullOrEmpty(object[i])) {
					empty = false;
					break;
				}
			}
			return empty;
		}
		return false;
	}
	
	/**
	 * datatable后台分页、查询功能
	 * @param <T>
	 * @param aoData
	 * @param list
	 * @return
	 */
	public static <T> String dataTableSearch(String aoData, List<T> list){
		JSONArray jsonarray = JSONArray.parseArray(aoData);
		 String sEcho = null;
		    int iDisplayStart = 0; // 起始索引
		    int iDisplayLength = 0; // 每页显示的行数
		    JSONObject obj = (JSONObject) jsonarray.get(0);
		    for (int i = 0; i < jsonarray.size(); i++) {
		        if (obj.get("sEcho") != null)
		            sEcho = obj.get("sEcho").toString();
		        if (obj.get("iDisplayStart") != null)
		            iDisplayStart = (Integer) obj.get("iDisplayStart");
		        if (obj.get("iDisplayLength") != null)
		            iDisplayLength = (Integer) obj.get("iDisplayLength");
		    }
		    JSONObject getObj = new JSONObject();
		    getObj.put("sEcho", sEcho);
		    getObj.put("iTotalRecords", list.size());//实际的行数
		    getObj.put("iTotalDisplayRecords", list.size());//显示的行数,这个要和上面写的一样
		    //最后一页索引长度判断
		   if(list.size() - iDisplayStart >= iDisplayLength){
			   getObj.put("aaData", list.subList(iDisplayStart,iDisplayStart + iDisplayLength));//要以JSON格式返回
		   }else if(list.size() - iDisplayStart < iDisplayLength){
			   int lastLength = list.size() - iDisplayStart;
			   getObj.put("aaData", list.subList(iDisplayStart,iDisplayStart + lastLength));//要以JSON格式返回
		   }
		return getObj.toString();
	}
	//一维数组求和
	public static float sumOfArray(float[] counts){
		int sum=0;
		for(int i=0;i<counts.length;i++){
			sum+=counts[i];
		}
		return sum;
	}
}
